﻿//Install Visual T4 for syntax highlighting!
//http://visualstudiogallery.msdn.microsoft.com/40a887aa-f3be-40ec-a85d-37044b239591



using System;

namespace Sponsorship.Domain.Payments
{
		
    public sealed class EnterPayment : ICommand
    {
        public Guid PaymentId { get; private set; }
        public Guid SponsorId { get; private set; }
        public decimal Amount { get; private set; }
        public DateTime DateTime { get; private set; }
        public BankInformation BankInformation { get; private set; }
        public string Text { get; private set; }
        public string Comment { get; private set; }
        
        public EnterPayment () {}
        public EnterPayment (Guid paymentId, Guid sponsorId, decimal amount, DateTime dateTime, BankInformation bankInformation, string text, string comment)
        {
            PaymentId = paymentId;
            SponsorId = sponsorId;
            Amount = amount;
            DateTime = dateTime;
            BankInformation = bankInformation;
            Text = text;
            Comment = comment;
        }
    }
    
    public sealed class PaymentEntered : Event
    {
        public Guid PaymentId { get; private set; }
        public Guid SponsorId { get; private set; }
        public decimal Amount { get; private set; }
        public DateTime DateTime { get; private set; }
        public BankInformation BankInformation { get; private set; }
        public string Text { get; private set; }
        public string Comment { get; private set; }
        
        public PaymentEntered () {}
        public PaymentEntered (Guid paymentId, Guid sponsorId, decimal amount, DateTime dateTime, BankInformation bankInformation, string text, string comment)
        {
            PaymentId = paymentId;
            SponsorId = sponsorId;
            Amount = amount;
            DateTime = dateTime;
            BankInformation = bankInformation;
            Text = text;
            Comment = comment;
        }
    }
    
    public sealed class EnterAnonymousPayment : ICommand
    {
        public Guid PaymentId { get; private set; }
        public decimal Amount { get; private set; }
        public DateTime DateTime { get; private set; }
        public BankInformation BankInformation { get; private set; }
        public string Text { get; private set; }
        public string Comment { get; private set; }
        
        public EnterAnonymousPayment () {}
        public EnterAnonymousPayment (Guid paymentId, decimal amount, DateTime dateTime, BankInformation bankInformation, string text, string comment)
        {
            PaymentId = paymentId;
            Amount = amount;
            DateTime = dateTime;
            BankInformation = bankInformation;
            Text = text;
            Comment = comment;
        }
    }
    
    public sealed class AnonymousPaymentEntered : Event
    {
        public Guid PaymentId { get; private set; }
        public decimal Amount { get; private set; }
        public DateTime DateTime { get; private set; }
        public BankInformation BankInformation { get; private set; }
        public string Text { get; private set; }
        public string Comment { get; private set; }
        
        public AnonymousPaymentEntered () {}
        public AnonymousPaymentEntered (Guid paymentId, decimal amount, DateTime dateTime, BankInformation bankInformation, string text, string comment)
        {
            PaymentId = paymentId;
            Amount = amount;
            DateTime = dateTime;
            BankInformation = bankInformation;
            Text = text;
            Comment = comment;
        }
    }
    
    public sealed class ChangePayment : ICommand
    {
        public Guid PaymentId { get; private set; }
        public int Version { get; private set; }
        public decimal Amount { get; private set; }
        public DateTime DateTime { get; private set; }
        public BankInformation BankInformation { get; private set; }
        public string Text { get; private set; }
        public string Comment { get; private set; }
        
        public ChangePayment () {}
        public ChangePayment (Guid paymentId, int version, decimal amount, DateTime dateTime, BankInformation bankInformation, string text, string comment)
        {
            PaymentId = paymentId;
            Version = version;
            Amount = amount;
            DateTime = dateTime;
            BankInformation = bankInformation;
            Text = text;
            Comment = comment;
        }
    }
    
    public sealed class PaymentChanged : Event
    {
        public Guid PaymentId { get; private set; }
        public decimal Amount { get; private set; }
        public DateTime DateTime { get; private set; }
        public BankInformation BankInformation { get; private set; }
        public string Text { get; private set; }
        public string Comment { get; private set; }
        
        public PaymentChanged () {}
        public PaymentChanged (Guid paymentId, decimal amount, DateTime dateTime, BankInformation bankInformation, string text, string comment)
        {
            PaymentId = paymentId;
            Amount = amount;
            DateTime = dateTime;
            BankInformation = bankInformation;
            Text = text;
            Comment = comment;
        }
    }
    
    public sealed class AssociateAnonymousPayment : ICommand
    {
        public Guid PaymentId { get; private set; }
        public int Version { get; private set; }
        public Guid SponsorId { get; private set; }
        
        public AssociateAnonymousPayment () {}
        public AssociateAnonymousPayment (Guid paymentId, int version, Guid sponsorId)
        {
            PaymentId = paymentId;
            Version = version;
            SponsorId = sponsorId;
        }
    }
    
    public sealed class AnonymousPaymentAssociated : Event
    {
        public Guid PaymentId { get; private set; }
        public Guid SponsorId { get; private set; }
        
        public AnonymousPaymentAssociated () {}
        public AnonymousPaymentAssociated (Guid paymentId, Guid sponsorId)
        {
            PaymentId = paymentId;
            SponsorId = sponsorId;
        }
    }
    
    public sealed class DisassociatePayment : ICommand
    {
        public Guid PaymentId { get; private set; }
        public int Version { get; private set; }
        
        public DisassociatePayment () {}
        public DisassociatePayment (Guid paymentId, int version)
        {
            PaymentId = paymentId;
            Version = version;
        }
    }
    
    public sealed class PaymentDisassociated : Event
    {
        public Guid PaymentId { get; private set; }
        
        public PaymentDisassociated () {}
        public PaymentDisassociated (Guid paymentId)
        {
            PaymentId = paymentId;
        }
    }
    
    public sealed class DeletePayment : ICommand
    {
        public Guid PaymentId { get; private set; }
        public int Version { get; private set; }
        
        public DeletePayment () {}
        public DeletePayment (Guid paymentId, int version)
        {
            PaymentId = paymentId;
            Version = version;
        }
    }
    
    public sealed class PaymentDeleted : Event
    {
        public Guid PaymentId { get; private set; }
        
        public PaymentDeleted () {}
        public PaymentDeleted (Guid paymentId)
        {
            PaymentId = paymentId;
        }
    }

}